{"componentChunkName":"component---src-templates-blog-page-index-tsx","path":"/ataque-front-running/","result":{"data":{"mdx":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"layout\": \"BlogPage\",\n  \"title\": \"Ataque utilizando a técnica front running\",\n  \"description\": \"Nesse artigo iremos aprender a como um contrato malicioso utiliza a técnica de front running para antecipar uma transação durante outra transação.\",\n  \"image\": \"capa.jpg\",\n  \"tags\": [\"Intermediário\", \"Hacks\"],\n  \"author\": [\"Matheus\"],\n  \"publishedAt\": \"28/06/2022\",\n  \"modifiedAt\": \"20220628\",\n  \"suburl\": \"ataque-front-running/\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Nesse artigo iremos aprender a como um contrato malicioso utiliza a t\\xE9cnica de \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"front running\"), \" para antecipar uma transa\\xE7\\xE3o durante outra transa\\xE7\\xE3o.\"), mdx(\"h2\", {\n    \"id\": \"vulnerabilidade\"\n  }, \"Vulnerabilidade\"), mdx(\"p\", null, \"As transa\\xE7\\xF5es levam algum tempo antes de serem executadas.\\nUm invasor pode observar o pool de transa\\xE7\\xF5es e enviar uma nova transa\\xE7\\xE3o, incluindo-a em um bloco antes da transa\\xE7\\xE3o original ser executada.\", mdx(\"br\", null), \"\\nEsse mecanismo pode ser usado para reordenar transa\\xE7\\xF5es em benef\\xEDcio do invasor.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Como funciona:\"), mdx(\"br\", null), \"\\nAlice cria um jogo de adivinha\\xE7\\xE3o. Voc\\xEA ganha 10 Ether se encontrar a string correta quere refere-se a hash de destino.\", mdx(\"br\", null)), mdx(\"p\", null, \"Vamos ver como esse contrato \\xE9 vulner\\xE1vel ao front running.\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Alice implanta FindThisHash com 10 Ether\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Bob encontra a string correta que refere o hash para o hash de destino. (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Ethereum\"), \")\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Bob chama solve(\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Ethereum\"), \") com o pre\\xE7o do gas definido para \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"15 gwei\")), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Eve est\\xE1 observando o pool de transa\\xE7\\xF5es para que a resposta seja enviada\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Eve v\\xEA a resposta de Bob e chama solve(\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Ethereum\"), \") com um pre\\xE7o de gas mais alto que Bob (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"100 gwei\"), \")\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"A transa\\xE7\\xE3o de Eve foi executada antes da transa\\xE7\\xE3o de Bob, ent\\xE3o Eve ganhou a recompensa de 10 Ether.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"O que aconteceu?\"), mdx(\"br\", null), \"\\nAs transa\\xE7\\xF5es levam algum tempo antes de serem executadas.\", mdx(\"br\", null), \"\\nAs transa\\xE7\\xF5es ainda n\\xE3o executadas s\\xE3o colocadas no pool de transa\\xE7\\xF5es.\", mdx(\"br\", null), \"\\nAs transa\\xE7\\xF5es com pre\\xE7o de gas mais alto geralmente s\\xE3o executadas primeiro.\", mdx(\"br\", null), \"\\nUm invasor pode obter a resposta do pool de transa\\xE7\\xF5es, enviar uma transa\\xE7\\xE3o com um pre\\xE7o de gas mais alto para que sua transa\\xE7\\xE3o seja executada antes das demais transa\\xE7\\xF5es.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ncontract FindThisHash {\\n    bytes32 public constant hash =\\n        0x564ccaf7594d66b1eaaea24fe01f0585bf52ee70852af4eac0cc4b04711cd0e2;\\n\\n    constructor() payable {}\\n\\n    function solve(string memory solution) public {\\n        require(hash == keccak256(abi.encodePacked(solution)), \\\"Resposta incorreta\\\");\\n\\n        (bool sent, ) = msg.sender.call{value: 10 ether}(\\\"\\\");\\n        require(sent, \\\"Failha ao enviar Ether\\\");\\n    }\\n}\\n\")), mdx(\"h2\", {\n    \"id\": \"técnicas-preventivas\"\n  }, \"T\\xE9cnicas preventivas\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"use o esquema commit-reveal\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"use o modelo submarino de envio\")), mdx(\"br\", null), mdx(\"h3\", {\n    \"id\": \"testar-no-remix\"\n  }, \"Testar no \", mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"https://remix.ethereum.org/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Remix\")), mdx(\"br\", null), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"Ataque utilizando a técnica front running","description":"Nesse artigo iremos aprender a como um contrato malicioso utiliza a técnica de front running para antecipar uma transação durante outra transação.","image":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAEEAgP/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAGyjqxmg//EABsQAAEEAwAAAAAAAAAAAAAAAAIBBBESECEi/9oACAEBAAEFAhWHB3QRmtet4//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EAB0QAAEEAgMAAAAAAAAAAAAAAAEAAhExA1EQEnH/2gAIAQEABj8CIOQlzpgaUiXHSE2uwvxXx//EABsQAQACAwEBAAAAAAAAAAAAAAEAESExQaHw/9oACAEBAAE/IbCQo6ES6Rxi4khqmSJMQXdo/ZPZ/9oADAMBAAIAAwAAABCAD//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EAB8QAQEAAQIHAAAAAAAAAAAAAAERACGBMUFRYXGR0f/aAAgBAQABPxAbvgac0E5Pzvj/AIlJr2MYgwUlHbTHpHRlR544AibIwEItdc//2Q==","aspectRatio":1.5151515151515151,"src":"/static/7cb2ab2781a12795a917634d9c36fc8c/0cb3d/capa.jpg","srcSet":"/static/7cb2ab2781a12795a917634d9c36fc8c/f836f/capa.jpg 200w,\n/static/7cb2ab2781a12795a917634d9c36fc8c/2244e/capa.jpg 400w,\n/static/7cb2ab2781a12795a917634d9c36fc8c/0cb3d/capa.jpg 536w","sizes":"(max-width: 536px) 100vw, 536px"}}},"tags":["Intermediário","Hacks"],"author":["Matheus"],"suburl":"ataque-front-running/","publishedAt":"28/06/2022","modifiedAt":"20220628"},"tableOfContents":{"items":[{"url":"#vulnerabilidade","title":"Vulnerabilidade"},{"url":"#técnicas-preventivas","title":"Técnicas preventivas","items":[{"url":"#testar-no-remix","title":"Testar no Remix"}]}]},"timeToRead":1},"allMdx":{"nodes":[{"frontmatter":{"suburl":"sistema-de-swap-estavel-amm/","title":"Como criar um sistema de Swap estável AMM","tags":["Avançado","DeFi"]}},{"frontmatter":{"suburl":"produto-constante-amm/","title":"Como criar um produto constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"soma-constante-amm/","title":"Como criar uma soma constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-cofre/","title":"Como criar um sistema de Cofre","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-staking/","title":"Como criar um sistema de Staking de Recompensas","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-preco-chainlink-oracle/","title":"Como criar um sistema de preços Oracle","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"exemplos-de-uso-do-uniswap-v3/","title":"Exemplos de uso do Uniswap V3","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"fornecimento-unilateral-com-uniswap-v2/","title":"Fornecimento unilateral ideal com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"adicionar-e-remover-liquidez-com-uniswap-v2/","title":"Como adicionar e remover liquidez com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"swap-com-uniswap-v2/","title":"Como realizar Swap com Uniswap V2","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"testes-com-echidna/","title":"Como realizar testes com Echidna","tags":["Intermediário"]}},{"frontmatter":{"suburl":"ignorar-verificacao-do-tamanho-do-contrato/","title":"Como ignorar a verificação do tamanho do contrato","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"repeticao-de-assinatura/","title":"Repetição de assinatura","tags":["Avançado","Hacks"]}},{"frontmatter":{"suburl":"manipular-timestamp-do-bloco/","title":"Manipulando o timestamp do bloco na blockchain","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-front-running/","title":"Ataque utilizando a técnica front running","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"honeypot/","title":"Criar uma armadilha para hackers com a técnica honeypot","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ocultar-script-malicioso/","title":"Como um contrato malicioso esconde seu script","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"phishing-com-txorigin/","title":"Phishing com tx.origin","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"negacao-de-servico/","title":"Inutilizar um contrato através da negação de serviço","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"fonte-de-aleatoriedade/","title":"Fonte de Aleatoriedade","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"chamada-de-funcao-delegatecall/","title":"Chamada de função delegatecall","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"acessando-variaveis-privadas/","title":"Acessando variáveis privadas","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"auto-destruicao/","title":"Ataques com Auto-destruição","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"estouro-de-memoria/","title":"Ataques com estouro de memória","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-de-reentrada/","title":"Ataque de reentrada, aprenda como funciona e como evitar","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"bloqueio-de-tempo-timelock/","title":"Criar um contrato com bloqueio de tempo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"contrato-para-multichamadas/","title":"Criar contrato para Multichamada de funções","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"financiamento-coletivo-crowd-fund/","title":"Criar um sistema de financiamento coletivo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"sistema-de-leilao-ingles-holandes/","title":"Criar um sistema de leilão inglês e holandês","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-bidirecional/","title":"Criar um Canal de pagamento bidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-unidirecional/","title":"Criar um Canal de pagamento unidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"gravar-dados-no-slot/","title":"Como gravar dados em qualquer slot","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"implantar-contrato-com-proxy/","title":"Como implantar qualquer contrato com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"trabalhando-com-proxy/","title":"Trabalhando com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"precomputar-endereco-contrato/","title":"Pré-computar endereço do Contrato com Create2","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc721/","title":"Criando nosso primeiro Token ERC721","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc20/","title":"Criando nosso primeiro Token ERC20","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-mapeamento-iteravel/","title":"Mapeamento Iterável","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-arvore-merkle/","title":"Árvore de Merkle","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-multi-assinatura/","title":"Carteira com Multi-Assinaturas","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-wallet/","title":"Carteira de Tokens","tags":["Iniciante","Aplicações"]}},{"frontmatter":{"suburl":"assinaturas-e-hashing-keccak/","title":"Verificando assinatura hashing com Keccak256","tags":["Intermediário","Avançado"]}},{"frontmatter":{"suburl":"abi/","title":"O que é ABI e para que serve?","tags":["Iniciante"]}},{"frontmatter":{"suburl":"import-e-libraries/","title":"Import e Libraries, para que servem?","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"criar-contrato-simples/","title":"Criar um contrato através de outro contrato","tags":["Intermediário"]}},{"frontmatter":{"suburl":"call-fallback-delegatecall/","title":"Call, Fallback, Delegatecall e chamadas de contratos","tags":["Intermediário"]}},{"frontmatter":{"suburl":"transfer-send-call/","title":"Enviar Ether com transfer, send e call","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"visibilidade-interface-pagavel/","title":"Visibilidade, Interfaces e Funções Pagáveis","tags":["Intermediário"]}},{"frontmatter":{"suburl":"evento-construtor-heranca/","title":"Evento, Construtor e Herança","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"tratamento-de-erros/","title":"Tratamento de erros de condições e exceções","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"funcoes/","title":"Funções e Modificadores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"armazenamento/","title":"Armazenamento de Dados","tags":["Intermediário"]}},{"frontmatter":{"suburl":"estruturas/","title":"Estruturas - Struct","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"enum/","title":"Enum - Enumeradores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"mapping-arrays/","title":"Mapping e Arrays","tags":["Iniciante"]}},{"frontmatter":{"suburl":"if-else-for-while/","title":"If, Else, For e While","tags":["Iniciante"]}},{"frontmatter":{"suburl":"ether-wei-gas/","title":"Ether, Wei e Taxa de Gas","tags":["Iniciante"]}},{"frontmatter":{"suburl":"variaveis/","title":"Entendendo as Variáveis","tags":["Iniciante"]}},{"frontmatter":{"suburl":"primeiro-aplicativo/","title":"Meu primeiro aplicativo","tags":["Iniciante","Aplicações"]}}]},"topicsYaml":{"topics":[{"desc":"Todos os conteúdos de nível iniciante estão disponíveis aqui","title":"Iniciante","url":"iniciante/"},{"desc":"Todos os conteúdos de nível intermediário estão disponíveis aqui","title":"Intermediário","url":"intermediario/"},{"desc":"Todos os conteúdos de nível avançado estão disponíveis aqui","title":"Avançado","url":"avancado/"},{"desc":"Todos os artigos referentes a exemplos de aplicações do Solidity, estão disponíveis aqui","title":"Aplicações","url":"aplicacoes/"},{"desc":"Todos os artigos referentes a exemplos de aplicação de hacks do Solidity, estão disponíveis aqui","title":"Hacks","url":"hacks/"},{"desc":"Todos os artigos referentes a exemplos de aplicação DeFi do Solidity, estão disponíveis aqui","title":"DeFi","url":"defi/"},{"desc":"Artigos de outras linguagens de programação, exemplos de interação entre a blockchain e aplicativos externos, estão disponíveis aqui","title":"Outros Artigos","url":"artigos/"}]}},"pageContext":{"suburl":"ataque-front-running/","postTopics":["Intermediário","Hacks"],"publishedAt":"28/06/2022","prevArticle":{"title":"Criar uma armadilha para hackers com a técnica honeypot","layout":"BlogPage","suburl":"honeypot/","author":["Matheus"],"tags":["Intermediário","Hacks"],"publishedAt":"27/06/2022","modifiedAt":"20220627"},"nextArticle":{"title":"Manipulando o timestamp do bloco na blockchain","layout":"BlogPage","suburl":"manipular-timestamp-do-bloco/","author":["Matheus"],"tags":["Intermediário","Hacks"],"publishedAt":"29/06/2022","modifiedAt":"20220629"}}},"staticQueryHashes":["119291576","2330562257","4065828390"]}